package www.openteam.com.widget;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ScrollView;

/**
 * Created by kylin on 2016/8/3.
 */
public class CustomerScorllView extends ScrollView {

    private static final int  size =4;
    private View inner;
    private float y;
    private Rect normal =new Rect();

    public CustomerScorllView(Context context) {
        super(context);
    }

    public CustomerScorllView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        if (getChildCount()>0){
            inner =getChildAt(0);
        }
    }


    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (inner==null){
            return super.onTouchEvent(ev);
        }else{
            commOnTouchEvent(ev);
        }
        return super.onTouchEvent(ev);
    }

    private void commOnTouchEvent(MotionEvent ev) {

        int action =ev.getAction();
        switch (action){
            case MotionEvent.ACTION_DOWN:
                y=ev.getY();
                break;
            case MotionEvent.ACTION_UP:
                if (isNeedAnimation()){
                    animation();
                }
                break;
            case MotionEvent.ACTION_MOVE:
                final  float preY =y;
                float nowY =ev.getY();
                /**
                 * size =4  表示拖动的距离为屏幕的高度的1/4
                 */
                int deltaY =(int) (preY -nowY) /size;
                y=nowY;
                if (isNeedMove()){
                    if (normal.isEmpty()){
                        normal.set(inner.getLeft(),inner.getTop(),
                                inner.getRight(),inner.getBottom());
                        return;
                    }
                    int yy =inner.getTop()-deltaY;

                    //移动布局
                    inner.layout(inner.getLeft(),yy,inner.getRight()
                    ,inner.getBottom()-deltaY);
                }
                break;
            default:
                break;
        }
    }

    private void animation() {
        TranslateAnimation ta =new TranslateAnimation(0,0, inner.getTop(),normal.top);
        ta.setDuration(200);
        inner.startAnimation(ta);
        inner.layout(normal.left, normal.top,normal.right,normal.bottom);
        normal.setEmpty();
    }


    public boolean isNeedAnimation(){
        return !normal.isEmpty();
    }

    private boolean isNeedMove() {
        int offset =inner.getMeasuredHeight() -getHeight();
        int scrollY =getScrollY();
        if (scrollY ==0|| scrollY==offset){
            return true;
        }
        return false;
    }
}
